class Solution:
    def grayCode(self, n: int) -> List[int]:
        return [i ^ i >> 1 for i in range(1<<n)]



'''
起始就是下一组数字是上一组数字的二进制表示的0正序 1逆序
数电
本质就是0 不用问之前遍历过了,1 需要逆序然后append, 各类编码的递增是平方级的
'''
class Solution:
    def grayCode(self, n: int):
        res, head = [0], 1
        for i in range(n):
            for j in range(len(res) - 1, -1, -1):
                res.append(head + res[j])
            head <<= 1
        return res